A mashup is generally defined as a web page or application that combines information from two or more external sources to create a new service. Web applications (e.g., Google Maps™, Yahoo! Search™) increasingly provide Application Programming Interfaces (APIs) that enable software developers to create mashups based on the data and functions of these applications.
Mashups may be used to combine functions provided by different sources. For example, a mashup may include a particular visualization of particular data provided by a first application, and a particular visualization of particular data provided by a second application. This mashup simply reflects an aggregation of the two visualizations. Advantages to such an aggregation are minimal, and no new or unanticipated functionality is provided thereby.
Some conventional mashups attempt to overcome the foregoing by providing some interaction between their constituent functions. FIG. 1 is a representative block diagram of mashup 110 including widgets 120 through 126. Each of widgets 120 through 126 includes processor-executable program code to provide data and/or functionality. For example, widgets 120 through 126 may comprise a weather icon, a photo viewer, a clock and a music player, respectively.
A developer of mashup 110 has written code (i.e., “wiring”) to provide interaction between widget 120 and 122. The wiring may determine a location corresponding to a picture displayed by widget 122, and may instruct widget 120 to indicate the current weather at that location. Development of this wiring, and any other desired wiring between widgets 120 through 126, requires expertise and resources.
The requirements for creating useful mashups are magnified in an enterprise environment. First, the demand for application development resources in an enterprise environment is usually far greater than the supply. Additionally, the internal wiring of enterprise mashups must be consistently maintained in view of changes to the source applications.
What is needed is a system for efficiently creating and enabling the operation of a composite of function-providing modules which provides some degree of interaction among the modules.